659d9f325164c0db88cbf2b4f8f6ccfe69f00e10,java/java-impl/src/com/intellij/codeInsight/ExpectedTypesProvider.java,MyParentVisitor,visitReturnStatement,#PsiReturnStatement#,333

Before Change



    @Override public void visitReturnStatement(PsiReturnStatement statement) {
      final PsiLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(statement, PsiLambdaExpression.class);
      final PsiMethod interfaceMethod = lambdaExpression != null ? LambdaUtil.getFunctionalInterfaceMethod(lambdaExpression.getFunctionalInterfaceType()) : null;
      final PsiMethod scopeMethod = interfaceMethod != null ? interfaceMethod : PsiTreeUtil.getParentOfType(statement, PsiMethod.class);
      if (scopeMethod != null) {
        PsiType type = scopeMethod.getReturnType();

After Change


      final PsiType type;
      final PsiLambdaExpression lambdaExpression = PsiTreeUtil.getParentOfType(statement, PsiLambdaExpression.class);
      if (lambdaExpression != null) {
        final PsiType functionalInterfaceType = lambdaExpression.getFunctionalInterfaceType();
        method = LambdaUtil.getFunctionalInterfaceMethod(functionalInterfaceType);
        type = LambdaUtil.getFunctionalInterfaceReturnType(functionalInterfaceType);
      }
      else {
        method = PsiTreeUtil.getParentOfType(statement, PsiMethod.class);
        type = method != null ? method.getReturnType() : null;
      }

      if (method != null) {
        visitMethodReturnType(method, type);
      }
    }